#include <iostream>
#include <fstream>
#include <string>
#include "contacts.pb.h"


// message PeopleInfo{
//     string name=1;
//     int32 age=2;
//     message Phone{
//         string number=1;
//     }
//     repeated Phone phone=3;
// }

// message Contacts{
//     repeated PeopleInfo contacts=1;
// }

//contacts中添加一个元素
//调用add_contacts申请出一块空间，返回指针，通过指针对这个空间初始化
//同样Phone新增一个元素
//调用add_phone申请出一块空间，返回指针，通过指针来初始化这个空间
void AddPeopleInfo(contacts::PeopleInfo* PeopleInfo)
{
    std::cout<<"------------新增联系人-----------------"<<std::endl;
    std::cout<<"请输入联系人姓名:";
    std::string name;
    std::getline(std::cin,name);
    PeopleInfo->set_name(name);

    std::cout<<"请输入联系人年龄:";
    int age;
    std::cin>>age;
    PeopleInfo->set_age(age);
    std::cin.ignore(256,'\n');

    for(int i=0;;i++)
    {
        std::cout<<"请输入联系人电话"<<i<<"(只输入回车完成添加):";
        std::string number;
        std::getline(std::cin,number);
        if(number.empty())
        break;
        contacts::PeopleInfo_Phone* phone=PeopleInfo->add_phone();
        phone->set_number(number);
    }

    std::cout<<"------------添加联系人成功-----------------"<<std::endl;
}
//实现通讯录
int main()
{
    //通讯录对象，内部是一个联系人信息的数组
    contacts::Contacts contacts;
    //先读取已经存在的联系人信息
    std::fstream in("contacts.bin",std::ios::in|std::ios::binary);
    if(!in)
    {
        std::cout<<"file not found,create it!"<<std::endl;
    }
    else if(!contacts.ParseFromIstream(&in))
    {
        std::cerr<<"parse error"<<std::endl;
        in.close();
        return -1;
    }

    //新增一个联系人
    AddPeopleInfo(contacts.add_contacts());

    //写入磁盘
    std::fstream out("contacts.bin",std::ios::out|std::ios::binary);
    if(!contacts.SerializeToOstream(&out))
    {
        std::cerr<<"serialize error"<<std::endl;
        in.close();
        out.close();
        return -2;
    }

    in.close();
    out.close();
    return 0;
}